package com.io.examples_shili;
import java.io.*;
import java.util.*;
public class ShowAllFile {
	public static void main (String[] args) {
		File file = new File("D:\\");
		System.out.println(file.toString()+"\n");
		getAllFileNames ( file, 0 );
		getAllFileLength (file);
		//将字节数换算为MB(兆字�?)
		System.out.println("当前目录下所有文件�?�大小为: "+ len / 1000000 +"MB ( "+len / 1000000000+"GB )" );
	}
	/**
	* 列出文件路径
	* @param folder
	* @param fnf
	* @return
	*/
	private static List lsFiles1 (File folder) {
			List l=new ArrayList();
			l.add(folder.getAbsolutePath());
			if(folder.isFile()){
			//处理file
			}else{
				File[] folders = folder.listFiles();
				for(File file : folders){
					l.addAll(lsFiles1 (file));
				}
			}
			return l;
	}
	private static void deleteFile(File file){
			if(!file.exists()){
				return;
			}
			System.out.print("删除===");
	
			if(file.isFile()){
				System.out.println("文件�?"+file);
			}else{
			System.out.println("文件夹："+file);
	
			for(File f :file.listFiles()){
			deleteFile(f);
			}
			file.delete();
			}
	}
	/**
	* 列出文件目录结构
	* @param folder
	* @param fnf
	* @return
	*/
	

	/**
	 * 利用递归方式遍历出整个目录下的子目录和文�?, 自己调用自己
	 * @param file
	 * @param level
	 */
	public static void getAllFileNames (File file, int level ){
		//如果是文件则计算文件大小
		for (int i = 0; i < level; i++) {
			System.out.print("-\t ");
		}
		//输出文件�?
		//System.out.println(file);
		System.out.println(file.getName());
		if( file == null || !file.exists() ){//如果路径里的文件为空 �? 没有文件和目录了//此处是�?�归�?, 能够跳出
			return;
		}else{
			if( file.isDirectory() ){//如果是目�?
				for ( File f : file.listFiles() ) {
					getAllFileNames( f , level +1 );// 每循环一�?, 深度�?1
				}
			}
		}
	}
	/**计算�?有文件大�?
	 * 利用递归方式遍历出整个目录下的子目录和文件的大小, 自己调用自己
	 * @param file
	 * @param level
	 */
	private static long len ;//�?有文件的总大�?, 单位: 字节(Byte)
	public static void getAllFileLength(File file){
		//如果是文件则计算文件大小
		if(file.isFile()){
			len += file.length();
		}
		if( file.isDirectory() || !file.exists() ){//如果是目录则继续循环查找文件, 计算文件大小
			if( file == null || !file.exists() ){//此处是�?�归�?, 能够跳出
					return;
			}else{
					for (  File f : file.listFiles() ) {
						getAllFileLength ( f );//递归�?�?
					}
			}
		}
	}
	
}
